package com.tedu.api.thread;
/**
 * 线程----创建三种
 * 第一种：子类   继承Thread方案--[使用率不多]
 *        ①编写子类   MyThread1继承Thread
 *        ②子类，重写run方法
 *        ③在实例化MyThread1对象调用start方法【启动线程】
 * 第二种：子类   实现Runnable  方案---【推荐用法】
 *       ①编写子类MyRunnable1  实现 Runnable 接口
 *       ②子类，强制重写run方法【线程运行】
 *       ③实例化MyRunnable1对象【没有start方法】
 *       ④创建Thread对象，把实例化MyRunnable1 对象通过构造器
 *       ⑤调用Thread对象 start方法
 *线程 继承Thread 内嵌入 Runnable接口  重写run方法
 *    JavaOOP---缺点：Java支持单继承，子类继承Thread  ，
 *   无法拓展：不仅线程，其他集合，继承其他类，只具备线程功能
 *   启动线程方法：start() ---来源于线程的生命周期
 *   缺点：线程创建不明确
 *  实现Runnable    真正线程运行---定义run方法，线程运行状态
 *  优点：继承还可以实现---拓展性高
 *  缺点：线程创建不方便--项目：步骤逻辑清晰
 * 第三种：匿名内部类实现线程--->Lambda表达式
 *
 */
public class RunnableAPI {
    public static void main(String[] args) {
        //③  创建  实现 线程对象 ----启动必须用start方法()
        MyRunnable1 mr1=new MyRunnable1();
        //④ 创建Thread对象-----启动线程方法
        Thread t1=new Thread(mr1);
        //⑤
        t1.start();
        //练习：MyRunnable2  子类  实现  Runnable---1000次
                                      //岁月不停留，可我为你守候
       //③
        MyRunnable2 mr2=new MyRunnable2();
        //④
        Thread t2=new Thread(mr2);
        //⑤
        t2.start();

    }
}
//①
class MyRunnable1 implements Runnable{
    //②
    public void run() {
        for (int i=0;i<1000;i++){
            System.out.println("时间不等人，但我等你~~（土味情话）");

        }
    }
}
//①
class MyRunnable2 implements Runnable{
    //②

    public void run() {
        for (int i = 0; i <1000 ; i++) {
            System.out.println("岁月不停留，可我为你守候");
        }
    }
}